# Go类型转换:string/int互转的8种方法
在Go语言开发中,string和int类型的相互转换是非常常见的操作。本文将介绍8种实用的方法来完成这两种类型之间的转换,每种方法都有其适用场景和注意事项。
## 1. strconv.Atoi() - string转int
```go
import "strconv"
func main() {
s := "123"
i, err := strconv.Atoi(s)
if err != nil {
fmt.Println("转换失败:", err)
return
}
fmt.Println(i) // 输出: 123
}
```
这是最常用的字符串转整型方法,它会返回两个值:转换后的整数和可能的错误。
## 2. strconv.Itoa() - int转string
```go
import "strconv"
func main() {
i := 123
s := strconv.Itoa(i)
fmt.Println(s) // 输出: "123"
}
```
与Atoi()相对应,Itoa()是最简单的整型转字符串方法。
## 3. strconv.ParseInt() - string转int(指定进制)
```go
import "strconv"
func main() {
s := "1010"
i, err := strconv.ParseInt(s, 2, 64) // 二进制转十进制
if err != nil {
fmt.Println("转换失败:", err)
return
}
fmt.Println(i) // 输出: 10
}
```
ParseInt()允许你指定字符串的进制(2-36)和目标位的位数(0,8,16,32,64)。
## 4. strconv.FormatInt() - int转string(指定进制)
```go
import "strconv"
func main() {
i := int64(10)
s := strconv.FormatInt(i, 2) // 十进制转二进制
fmt.Println(s) // 输出: "1010"
}
```
与ParseInt()配套使用,可以指定转换后的进制。
## 5. fmt.Sprintf() - int转string
```go
import "fmt"
func main() {
i := 123
s := fmt.Sprintf("%d", i)
fmt.Println(s) // 输出: "123"
}
```
使用fmt包中的Sprintf()方法,灵活但性能稍逊于strconv。
## 6. fmt.Sscanf() - string转int
```go
import "fmt"
func main() {
s := "123"
var i int
_, err := fmt.Sscanf(s, "%d", &i)
if err != nil {
fmt.Println("转换失败:", err)
return
}
fmt.Println(i) // 输出: 123
}
```
与Sprintf()相反,可以解析格式化的字符串。
## 7. 使用strconv.ParseUint()处理无符号整数
```go
import "strconv"
func main() {
s := "123"
i, err := strconv.ParseUint(s, 10, 64)
if err != nil {
fmt.Println("转换失败:", err)
return
}
fmt.Println(i) // 输出: 123
}
```
对于无符号整数,使用ParseUint()更合适。
## 8. 使用strconv.FormatUint()处理无符号整数
```go
import "strconv"
func main() {
i := uint64(123)
s := strconv.FormatUint(i, 10)
fmt.Println(s) // 输出: "123"
}
```
与ParseUint()配套使用的方法。
## 性能比较
在大多数情况下,strconv包中的方法比fmt包中的方法性能更好:
- strconv.Itoa()比fmt.Sprintf()快约4倍
- strconv.Atoi()比fmt.Sscanf()快约6倍
## 注意事项
1. 转换失败时一定要检查err,避免程序panic
2. 大整数转换时要注意int类型的范围限制
3. 字符串包含非数字字符时会导致转换失败
4. 不同进制转换时要注意源字符串的合法性
## 总结
根据不同的使用场景选择合适的转换方法:
- 简单转换:使用strconv.Atoi()和strconv.Itoa()
- 需要指定进制:使用ParseInt/FormatInt或ParseUint/FormatUint
- 需要格式化输出:使用fmt.Sprintf()
- 需要解析格式化输入:使用fmt.Sscanf()
掌握这些方法,你将能够轻松应对Go开发中各种string和int类型转换的需求。